package org.example.order.dao;


import org.apache.ibatis.annotations.Param;
import org.example.order.dto.OrderDto;
import org.example.order.entity.OrderEntity;
import org.example.order.vo.OrderMemberInfoVo;
import org.example.order.vo.OrderPayVo;
import org.example.order.vo.OrderRespVo;
import org.example.order.vo.OrderVo;

import java.util.List;

/**
 * @author xiaojie_cc
 * @version 1.0
 */
public interface OrderDao{

    // 查询订单状态
    Integer getOrderStatusBySn(@Param("orderSn") String orderSn);

    // 根据id查询订单状态
    Integer getOrderStatusById(@Param("id") Long id);

    // 修改订单状态
    void updateOrderStatus(@Param("id") Long id, @Param("status") int status);

    // 保存订单
    void saveOrder(OrderEntity orderEntity);

    // 查询订单详细信息
    OrderRespVo getOrderInfoById(@Param("id") Long id, @Param("memberId") Long memberId);

    // 支付时查询订单的订单号和支付金额
    OrderPayVo getOrderPayInfoBySn(@Param("orderSn") String orderSn);

    // 用户查看订单
    List<OrderMemberInfoVo> getOrderInfoByMemberId(@Param("memberId") Long memberId, @Param("status") Integer status);

    List<OrderMemberInfoVo> getOrderInfoByMemberIdAll(@Param("memberId") Long memberId);

    // 逻辑删除订单
    int deleteOrder(@Param("orderId") Long orderId, @Param("memberId") long memberId);

    // 确认收货
    int updateConfirm(@Param("orderId") Long orderId, @Param("memberId") long memberId);

    // 取消订单
    int cancelOrder(@Param("orderId") Long orderId, @Param("memberId") long memberId);

    // 后台查询订单
    List<OrderVo> list(OrderDto orderDto);

    void updateOrderStatusBySn(@Param("orderSn") String outTradeNo, @Param("status") int status);
}
